package com.miage.itrading.metier;

import java.util.ArrayList;

import com.miage.itrading.entites.Cotation;

public class Critere {
	private ArrayList<Cotation> cotations;

	public ArrayList<Cotation> getCotations() {
		return cotations;
	}

	public void setCotations(ArrayList<Cotation> cotations) {
		this.cotations = cotations;
	}

	public Critere(ArrayList<Cotation> cotations) {
		super();
		this.cotations = cotations;
	}

	public ArrayList<Cotation> getActionsByVariation(int sens, float valeur, int periode){
		ArrayList<Cotation> retour = new ArrayList<Cotation>();
		int nbjours = 0;

		switch (periode){ 
			case 0 : nbjours = 1;break;
			case 1 : nbjours = 5;break;
			case 2 : nbjours = 21;break;
			case 3 : nbjours = 253;break;
		}

		for(Cotation c : cotations){
			if(c.getHistoriques().size() >0)
			{
				float val1 = c.getHistoriques().get(c.getHistoriques().size() -1).getFermeture();
				float val2 = c.getHistoriques().get(c.getHistoriques().size() -1 - nbjours).getFermeture();
				float var = ((val1-val2) / val1) * 100;
				if (sens == 0){
					if(var >= valeur)retour.add(c);
				}
				else {
					if(var <= valeur)retour.add(c);
				}
			}
		}
		return retour;
	}

	public ArrayList<Cotation> getActionsByGap(int type){
		ArrayList<Cotation> retour = new ArrayList<Cotation>();

		if(type == 0)
		{
			for(Cotation c : cotations){
				if(c.getHistoriques().size() >0)
				{
					if(c.getHistoriques().get(c.getHistoriques().size()-2).getPlusHaut() < c.getHistoriques().get(c.getHistoriques().size()-1).getPlusBas() )
					{
						retour.add(c);
					}
				}
			}
		}
		if(type == 1){
			for(Cotation c : cotations){
				if(c.getHistoriques().size() >0)
				{
					if(c.getHistoriques().get(c.getHistoriques().size()-2).getPlusBas() > c.getHistoriques().get(c.getHistoriques().size()-1).getPlusHaut() )
					{
						retour.add(c);
					}
				}
			}
		}

		return retour;
	}	

	public ArrayList<Cotation> getActionsByEnglobante(int type){
		ArrayList<Cotation> retour = new ArrayList<Cotation>();

		if(type == 0)
		{
			for(Cotation c : cotations){
				if(c.getHistoriques().size() >0)
				{
					//veille rouge
					if(c.getHistoriques().get(c.getHistoriques().size()-2).getFermeture() < c.getHistoriques().get(c.getHistoriques().size()-2).getOuverture())
					{
						//jour vert
						if(c.getHistoriques().get(c.getHistoriques().size()-1).getFermeture() > c.getHistoriques().get(c.getHistoriques().size()-1).getOuverture())
						{
							//Ouvre plus bas que la veille a fermé
							if(c.getHistoriques().get(c.getHistoriques().size()-2).getFermeture() > c.getHistoriques().get(c.getHistoriques().size()-1).getOuverture())
							{
								//Ferme plus bas que la veille a ouvert
								if(c.getHistoriques().get(c.getHistoriques().size()-2).getOuverture() < c.getHistoriques().get(c.getHistoriques().size()-1).getFermeture())
								{
									retour.add(c);
								}
							}
						}
					}	
				}
			}
		}
		if(type == 1){
			for(Cotation c : cotations){
				if(c.getHistoriques().size() >0)
				{
					//veille verte
					if(c.getHistoriques().get(c.getHistoriques().size()-2).getFermeture() > c.getHistoriques().get(c.getHistoriques().size()-2).getOuverture())
					{
						//jour rouge
						if(c.getHistoriques().get(c.getHistoriques().size()-1).getFermeture() < c.getHistoriques().get(c.getHistoriques().size()-1).getOuverture())
						{
							//Ouvre plus bas que la veille a fermé
							if(c.getHistoriques().get(c.getHistoriques().size()-2).getFermeture() < c.getHistoriques().get(c.getHistoriques().size()-1).getOuverture())
							{
								//Ferme plus bas que la veille a ouvert
								if(c.getHistoriques().get(c.getHistoriques().size()-2).getOuverture() > c.getHistoriques().get(c.getHistoriques().size()-1).getFermeture())
								{
									retour.add(c);
								}
							}
						}
					}
				}
			}
		}
		return retour;
	}


	public ArrayList<Cotation> getActionsByDojis(){
		ArrayList<Cotation> retour = new ArrayList<Cotation>();
		for(Cotation c : cotations){
			if(c.getHistoriques().size() >0)
			{
				float ouverture = c.getHistoriques().get(c.getHistoriques().size()-1).getOuverture();
				float fermeture = c.getHistoriques().get(c.getHistoriques().size()-1).getFermeture();
				float plusHaut = c.getHistoriques().get(c.getHistoriques().size()-1).getPlusHaut();
				float plusBas = c.getHistoriques().get(c.getHistoriques().size()-1).getPlusBas();

					if(ouverture >= fermeture-(fermeture*0.00125) && ouverture <= fermeture+(fermeture*0.00125) )
					{
						if(plusHaut >= ouverture + ouverture * 0.005 &&  plusBas <= ouverture + ouverture * 0.005)
						{
							retour.add(c);
						}
					}
				
			}
		}

		return retour;
	}	


	public ArrayList<Cotation> getActionsByMarteaux(){
		ArrayList<Cotation> retour = new ArrayList<Cotation>();
		for(Cotation c : cotations){
			if(c.getHistoriques().size() >0)
			{
			float ouverture = c.getHistoriques().get(c.getHistoriques().size()-1).getOuverture();
			float fermeture = c.getHistoriques().get(c.getHistoriques().size()-1).getFermeture();
			float plusHaut = c.getHistoriques().get(c.getHistoriques().size()-1).getPlusHaut();
			float plusBas = c.getHistoriques().get(c.getHistoriques().size()-1).getPlusBas();

			
				if(ouverture >= fermeture-(fermeture*0.00250) && ouverture <= fermeture+(fermeture*0.00250) )
				{
					if(plusHaut >= ouverture + ouverture * 0.005 && ( plusBas <= ouverture + ouverture * 0.00125 && plusBas >= ouverture - ouverture * 0.00125 ))
					{
						retour.add(c);
					}
				}
			}
			}
		return retour;
		}
		
		public ArrayList<Cotation> getActionsByPendus(){
			ArrayList<Cotation> retour = new ArrayList<Cotation>();
			for(Cotation c : cotations){
				if(c.getHistoriques().size() >0)
				{
				float ouverture = c.getHistoriques().get(c.getHistoriques().size()-1).getOuverture();
				float fermeture = c.getHistoriques().get(c.getHistoriques().size()-1).getFermeture();
				float plusHaut = c.getHistoriques().get(c.getHistoriques().size()-1).getPlusHaut();
				float plusBas = c.getHistoriques().get(c.getHistoriques().size()-1).getPlusBas();

				
					if(ouverture >= fermeture-(fermeture*0.00250) && ouverture <= fermeture+(fermeture*0.00250) )
					{
						if(plusBas <= ouverture - ouverture * 0.005 && ( plusHaut <= ouverture + ouverture * 0.00125 && plusHaut >= ouverture - ouverture * 0.00125 ))
						{
							retour.add(c);
						}
					}
				}
			}

		return retour;
	}	

}

